﻿using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using SegIdenMovilBT.Entidad;
using SegIdenMovilBT.DataAccess;
using System.Data;

namespace SegIdenMovilBT.Datos
{
    public class ItemDA
    {
        #region --- Constantes Item ---
        private const string CODITEM = "CODITEM";
        private const string CODIFICACION = "CODIFICACION";
        private const string ORIGEN = "ORIGEN";
        private const string PROPIEDADES = "PROPIEDADES";
        private const string PRECIOCOMPRA = "PRECIOCOMPRA";
        private const string CODMONEDA = "CODMONEDA";
        private const string CODOC = "CODOC";
        private const string NROLINEA = "NROLINEA";
        private const string PRECIOVENTA = "PRECIOVENTA";

        private const string CODPRODUCTO = "CODPRODUCTO";
        private const string CODPRODUCTOPROVEEDOR = "CODPRODUCTOPROVEEDOR"; 
        private const string DESCRIPCION = "DESCRIPCION";
        private const string PRECIOVENTAMINIMO = "PRECIOVENTAMINIMO";
        private const string PRECIOVENTAMAXIMO = "PRECIOVENTAMAXIMO";
        private const string ALTO = "ALTO";
        private const string ANCHO = "ANCHO";
        private const string LARGO = "LARGO";
        private const string CODPROVEEDOR = "CODPROVEEDOR";
        private const string CODTIENDA = "CODTIENDA";
        private const string ESTADO= "ESTADO";
        #endregion

        #region --- Metodos Propios ---
        public Item consultarItem(Item item)
        {
            Item itemObtenido = null;
            StringBuilder sentenciaSQL = null;

            sentenciaSQL = new StringBuilder();
            sentenciaSQL.Append("SELECT A.CODITEM, A.CODPRODUCTO, C.CODPRODUCTOPROVEEDOR, C.DESCRIPCION, C.PRECIOVENTAMINIMO, ");
            sentenciaSQL.Append("C.PRECIOVENTAMAXIMO, C.ALTO, C.ANCHO, C.LARGO, A.CODIFICACION, ");
            sentenciaSQL.Append("A.CODPROVEEDOR, A.ORIGEN, A.PROPIEDADES, A.PRECIOCOMPRA, A.CODMONEDA, ");
            sentenciaSQL.Append("A.CODOC, A.NROLINEA, A.CODTIENDA, A.ESTADO ");
            sentenciaSQL.Append("FROM item A ");
            sentenciaSQL.Append("INNER JOIN producto C ON (A.CODPRODUCTO = C.CODPRODUCTO) ");
            sentenciaSQL.Append("WHERE A.CODIFICACION = '" + item.codificacion + "' ");
            sentenciaSQL.Append("AND A.ESTADO <> ESTADO_UNION ");

            sentenciaSQL.Append("UNION ");

            sentenciaSQL.Append("SELECT A.CODITEM, A.CODPRODUCTO, C.CODPRODUCTOPROVEEDOR, C.DESCRIPCION, C.PRECIOVENTAMINIMO, ");
            sentenciaSQL.Append("C.PRECIOVENTAMAXIMO, C.ALTO, C.ANCHO, C.LARGO, A.CODIFICACION, ");
            sentenciaSQL.Append("A.CODPROVEEDOR, A.ORIGEN, A.PROPIEDADES, A.PRECIOCOMPRA, A.CODMONEDA, ");
            sentenciaSQL.Append("A.CODOC, A.NROLINEA, A.CODTIENDA, A.ESTADO ");
            sentenciaSQL.Append("FROM item A ");
            sentenciaSQL.Append("INNER JOIN item_componente B ON (A.CODITEM = B.CODITEM) ");
            sentenciaSQL.Append("INNER JOIN producto C ON (A.CODPRODUCTO = C.CODPRODUCTO) ");
            sentenciaSQL.Append("WHERE B.CODIFICACION = '" + item.codificacion + "'");

            // Carga de datos obtenido de la BD
            using (Database db = new Database())
            {
                db.TextoSQL = sentenciaSQL.ToString();

                IDataReader dr = db.obtenerDataReader();

                while (dr.Read())
                {
                    itemObtenido = new Item();
                    itemObtenido.codItem = dr[CODITEM].ToString();

                    itemObtenido.producto = new Producto();
                    itemObtenido.producto.codigo = dr[CODPRODUCTO].ToString();
                    itemObtenido.producto.codProductoProveedor = dr[CODPRODUCTOPROVEEDOR].ToString();
                    itemObtenido.producto.descripcion = dr[DESCRIPCION].ToString();
                    itemObtenido.producto.precioVentaMinimo = Convert.ToDouble(dr[PRECIOVENTAMINIMO]);
                    itemObtenido.producto.precioVentaMaximo = Convert.ToDouble(dr[PRECIOVENTAMAXIMO]);
                    itemObtenido.producto.alto = Convert.ToDouble(dr[ALTO]);
                    itemObtenido.producto.ancho = Convert.ToDouble(dr[ANCHO]);
                    itemObtenido.producto.largo = Convert.ToDouble(dr[LARGO]);

                    itemObtenido.codificacion = dr[CODIFICACION].ToString();

                    itemObtenido.proveedor = new Proveedor();
                    itemObtenido.proveedor.codProveedor = dr[CODPROVEEDOR].ToString();

                    itemObtenido.origen = dr[ORIGEN].ToString();
                    itemObtenido.propiedades = dr[PROPIEDADES].ToString();

                    itemObtenido.precioCompra = Convert.ToDouble(dr[PRECIOCOMPRA]);

                    itemObtenido.moneda = new Moneda();
                    itemObtenido.moneda.codigo = dr[CODMONEDA].ToString();

                    itemObtenido.lineaOrdenCompra = new LineaOrdenCompra();
                    itemObtenido.lineaOrdenCompra.codOC = dr[CODOC].ToString();
                    itemObtenido.lineaOrdenCompra.numeroLinea = dr[NROLINEA].ToString();

                    itemObtenido.tienda = new Tienda();
                    itemObtenido.tienda.codigo = dr[CODTIENDA].ToString();

                    itemObtenido.estado = dr[ESTADO].ToString();
                }
            }

            return itemObtenido;
        }
        #endregion
    }
}
